package com.algorithm.liyc.practice;

/**
 * 反转字符串II
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起, 每计数至 2k 个字符，就反转这 2k 个字符中的前 k 个字符。
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 *
 * @author Liyc
 * @date 2023/12/12 15:50
 **/

public class Solution24 {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        for (int i = 0; i < ch.length; i += (2 * k)){
            // 2. 剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符
            if (i + k < ch.length) {
                resver(ch, i, i+k-1);
            } else {
                // 3. 剩余字符少于 k 个，则将剩余字符全部反转
                resver(ch, i, ch.length - 1);
            }
        }
        return new String(ch);
    }
    // 定义翻转函数
    public void resver(char[] ch, int l, int r) {
        for (; l < r; l++,r--) {
            char temp = ch[l];
            ch[l] = ch[r];
            ch[r] = temp;
        }
    }
}
